package org.subject.service;

import org.apache.ibatis.annotations.Param;
import org.subject.dto.MessageAndUser;
import org.subject.entity.Message;

import java.util.List;

/**
 * 业务接口：站在“使用者”角度设计接口
 * 三个方面：方法定义粒度，参数，返回类型（return 类型、异常）
 * <p>
 * 竞赛信息业务接口
 * Created by kai on 2017/4/17.
 */
public interface MessageService {

    /**
     * 查询所有的竞赛信息
     *
     * @return
     */
    List<Message> getMessageList();

    /**
     * 查询单条竞赛信息
     *
     * @param messageId
     * @return
     */
    Message getById(long messageId);

    /**
     * 插入竞赛信息
     *
     * @param message
     * @return
     */
    boolean insertMessage(Message message);

    /**
     * 查询所有的竞赛信息以及发布人信息
     *
     * @return
     */
    List<MessageAndUser> queryAll();

    /**
     * 搜索和分页查询数据
     *
     * @param userName
     * @param title
     * @param currentPage
     * @return
     */
    List<MessageAndUser> queryMessageList(@Param("userName") String userName, @Param("title") String title, @Param("currentPage") int currentPage);
    /**
     * 获取消息列表的条数
     *
     * @param userName
     * @param title
     * @return
     */
    int queryMessageCount(@Param("userName") String userName, @Param("title") String title);

    /**
     * 获取所有的竞赛信息
     *
     * @return
     */
    List<Message> queryAllMessage();

    /**
     * 通过竞赛信息id获取竞赛详情信息
     *
     * @param messageId
     * @return
     */
    MessageAndUser selectMUByKey(long messageId);

    /**
     * 创建竞赛
     *
     * @param message
     * @return
     */
    int insert(Message message);

    /**
     * 根据竞赛id删除竞赛信息
     *
     * @param messageId
     * @return
     */
    int deleteByPrimaryKey(Long messageId);

    /**
     * 根据发布者id查询数据
     *
     * @param userId
     * @param currentPage
     * @return
     */
    List<MessageAndUser> queryMessageByUId(@Param("userId") String userId, @Param("currentPage") int currentPage);

    /**
     * 根据发布者id获取消息列表的条数
     *
     * @param userId
     * @return
     */
    int queryCountByUId(@Param("userId") String userId);

    /**
     * 根据用户的院系id查询竞赛信息
     *
     * @return
     */
    List<MessageAndUser> queryMessageByFId(@Param("facultyId") String facultyId, @Param("currentPage") int currentPage);

    /**
     * 根据用户的院系id查询竞赛数量
     *
     * @param facultyId
     * @return
     */
    int queryCountByFId(@Param("facultyId") String facultyId);
}
